// 2014-02-01 Tyrghen
//---------------------------------------------
// Usage:
//  [tank] call edt_fnc_active;
//  OR tank call edt_fnc_active;
// Alternate:
//  [[vec1,vec2,vec3]] call edt_fnc_active;
//  OR [vec1,vec2,vec3] call edt_fnc_active;
//---------------------------------------------
// Purpose:
// Determines whether the vehicle is still "Active". This is meant to be an alternative to the !alive check. Because a vehicule is not a threat anymore if it cannot Fire
// or has no crew anymore.
// 
// Parameters:
// - The vehicle to check
//
// Alternate option:
// - An array of vehicles to check. The result is true if at least one vehicle is active
//
// Returns:
// True if it is still active or false otherwise
//---------------------------------------------
// Objectif:
// Détermine si un véhicule est toujours "Actif". C'est une alternative à l'utilisation de !alive. Parce qu'un véhicule n'est plus une menace s'il ne peut plus tirer
// ou s'il n'a plus d'équipage.
//
// Paramètres:
// - Le véhicule à contrôler
//
// Option alternative:
// - Un tableau de véhicules à contrôler. Le résultat est Vrai si au moins un vehicule est actif.
//
// Renvoie:
// True si le véhicule est active ou False dans les autres cas
//---------------------------------------------

//#define __FORCE_TRACE__
//#define __FORCE_DEBUG__
//#define __FORCE_INFO__
#include <tmf_constants.h>
#include <tmf_macros.h>
#define THIS_FILE "editor\fn_active.sqf"

TRACE_1("Start",_this);
TMFPROFILERSTART;

private ["_object","_result"];
_object = "";
if (IS_ARRAY(_this) && {count _this == 1}) then {
	_object = _this select 0;
} else {
	_object = _this;
};
_result = false;
if (IS_OBJECT(_object)) then {
	TRACE_1("Checks",ARR_5((!isnull _object),(alive _object),(canMove _object),(canFire _object),(if (_object isKindOf "AllVehicles") then { ({alive _x} count (crew _object)) > 0 } else { true })));
	_result = (!isnull _object) && (alive _object) && (canMove _object) && (if (_object isKindOf "AllVehicles") then { ({alive _x} count (crew _object)) > 0 } else { true });
} else {
	if (IS_ARRAY(_object)) then {
		TRACE_1("Object array",_object);
		_result = false;
		{
			_result = _result || ([_x] call EFUNC(active));
			if (_result) exitWith { _result = true; };
		} foreach _object;
	};
};
TRACE_1("End",_result);
TMFPROFILERSTOP;
_result;